home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / mac / files / t_sys5 / 92052tar.gz / 920528.tar / ripcmd.c < prev    next >
C/C++ Source or Header  |  1992-05-14  |  3KB  |  171 lines

  1. /* @(#) $Header: ripcmd.c,v 1.3 92/05/14 13:20:26 deyke Exp $ */
  2.  
  3. /* RIP-related user commands
  4.  *   Al Broscious, N3FCT
  5.  *   Phil Karn, KA9Q
  6.  */
  7. #include <stdio.h>
  8. #include "global.h"
  9. #include "mbuf.h"
  10. #include "netuser.h"
  11. #include "internet.h"
  12. #include "cmdparse.h"
  13. #include "timer.h"
  14. #include "iface.h"
  15. #include "udp.h"
  16. #include "rip.h"
  17. #include "commands.h"
  18.  
  19. struct cmds Ripcmds[] = {
  20.     "accept",       dodroprefuse,   0,      2,
  21.         "rip accept <gateway> ",
  22.     "add",          doripadd,       0,      3,
  23.         "rip add <dest> <interval> [<flags>]",
  24.     "drop",         doripdrop,      0,      2,
  25.         "rip drop <dest>",
  26.     "merge",        doripmerge,     0,      0,      NULLCHAR,
  27.     "refuse",       doaddrefuse,    0,      2,
  28.         "rip refuse <gateway>",
  29.     "request",      doripreq,       0,      2,      NULLCHAR,
  30.     "status",       doripstat,      0,      0,      NULLCHAR,
  31.     "trace",        doriptrace,     0,      0,      NULLCHAR,
  32.     NULLCHAR,
  33. };
  34.  
  35. int
  36. dorip(argc,argv,p)
  37. int argc;
  38. char *argv[];
  39. void *p;
  40. {
  41.     return subcmd(Ripcmds,argc,argv,p);
  42. }
  43.  
  44. /* Add an entry to the RIP output list */
  45. int
  46. doripadd(argc,argv,p)
  47. int argc;
  48. char *argv[];
  49. void *p;
  50. {
  51.     char flags = 0;
  52.  
  53.     if(argc > 3)
  54.         flags = atoi(argv[3]);
  55.  
  56.     return rip_add(resolve(argv[1]),atol(argv[2]),flags);
  57. }
  58.  
  59. /* Add an entry to the RIP refuse list */
  60. int
  61. doaddrefuse(argc,argv,p)
  62. int argc;
  63. char *argv[];
  64. void *p;
  65. {
  66.     return riprefadd(resolve(argv[1]));
  67. }
  68.  
  69. /* Drop an entry from the RIP output list */
  70. int
  71. doripdrop(argc,argv,p)
  72. int argc;
  73. char *argv[];
  74. void *p;
  75. {
  76.     return rip_drop(resolve(argv[1]));
  77. }
  78.  
  79. /* Drop an entry from the RIP refuse list */
  80. int
  81. dodroprefuse(argc,argv,p)
  82. int argc;
  83. char *argv[];
  84. void *p;
  85. {
  86.     return riprefdrop(resolve(argv[1]));
  87. }
  88.  
  89. /* Initialize the RIP listener */
  90. int
  91. doripinit(argc,argv,p)
  92. int argc;
  93. char *argv[];
  94. void *p;
  95. {
  96.     return rip_init();
  97. }
  98. int
  99. doripstop(argc,argv,p)
  100. int argc;
  101. char *argv[];
  102. void *p;
  103. {
  104.     del_udp(Rip_cb);
  105.     Rip_cb = NULLUDP;
  106.     return 0;
  107. }
  108. int
  109. doripreq(argc,argv,p)
  110. int argc;
  111. char *argv[];
  112. void *p;
  113. {
  114.     int16 replyport;
  115.  
  116.     if(argc > 2)
  117.         replyport = atoi(argv[2]);
  118.     else
  119.         replyport = RIP_PORT;
  120.     return ripreq(resolve(argv[1]),replyport);
  121. }
  122. /* Dump RIP statistics */
  123. int
  124. doripstat(argc,argv,p)
  125. int argc;
  126. char *argv[];
  127. void *p;
  128. {
  129.     struct rip_list *rl;
  130.     struct rip_refuse *rfl;
  131.  
  132.     printf("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n",
  133.      Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response,
  134.      Rip_stat.unknown,Rip_stat.refusals);
  135.     if(Rip_list != NULLRL){
  136.         printf("Active RIP output interfaces:\n");
  137.         printf("Dest Addr       Interval Split\n");
  138.         for(rl=Rip_list; rl != NULLRL; rl = rl->next){
  139.             if(printf("%-16s%-9lu%-6u\n",
  140.              inet_ntoa(rl->dest),rl->interval,
  141.              !!(rl->flags&RIP_SPLIT)) == EOF)
  142.                 break;
  143.         }
  144.     }
  145.     if(Rip_refuse != NULLREF){
  146.         printf("Refusing announcements from gateways:\n");
  147.         for(rfl=Rip_refuse; rfl != NULLREF;rfl = rfl->next){
  148.             if(printf("%s\n",inet_ntoa(rfl->target)) == EOF)
  149.                 break;
  150.         }
  151.     }
  152.     return 0;
  153. }
  154.  
  155. int
  156. doriptrace(argc,argv,p)
  157. int argc;
  158. char *argv[];
  159. void *p;
  160. {
  161.     return setshort(&Rip_trace,"RIP tracing",argc,argv);
  162. }
  163. int
  164. doripmerge(argc,argv,p)
  165. int argc;
  166. char *argv[];
  167. void *p;
  168. {
  169.     return setbool(&Rip_merge,"RIP merging",argc,argv);
  170. }
  171.